package com.ecoolex.discount.sales.entity;

import com.ecoolex.framework.common.annotation.Description;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import org.springframework.lang.NonNull;

/**
 *
 *   礼品卡<br>
 *<br>
 * 数据表： yw_gift_card
 *
 */
@Description({"礼品卡"})
public class YWGiftCard implements Serializable {
    /**
     *
     * 字段名： yw_gift_card.Id
     */
    @NonNull
    private Long id;

    /**
     *
     *   礼品卡Id    <br>
     *<br>
     * 字段名： yw_gift_card.CardId
     */
    @Description({"礼品卡Id", "不能为空", "数据长度: 10"})
    @NonNull
    private Integer cardId;

    /**
     *
     *   国家或地区    <br>
     *<br>
     * 字段名： yw_gift_card.Region
     */
    @Description({"国家或地区", "不能为空", "数据长度: 40"})
    @NonNull
    private String region;

    /**
     *
     *   服务商Id    <br>
     *<br>
     * 字段名： yw_gift_card.ServiceId
     */
    @Description({"服务商Id", "不能为空", "数据长度: 100"})
    @NonNull
    private String serviceId;

    /**
     *
     *   渠道ID    <br>
     *<br>
     * 字段名： yw_gift_card.ChannelId
     */
    @Description({"渠道ID", "不能为空", "数据长度: 100"})
    @NonNull
    private String channelId;

    /**
     *
     *   卡名称    <br>
     *<br>
     * 字段名： yw_gift_card.Name
     */
    @Description({"卡名称", "不能为空", "数据长度: 400"})
    @NonNull
    private String name;

    /**
     *
     *   品牌Id    <br>
     *<br>
     * 字段名： yw_gift_card.BrandId
     */
    @Description({"品牌Id", "不能为空", "数据长度: 100"})
    @NonNull
    private String brandId;

    /**
     *
     *   卡状态：active为可购买，close为无库存    <br>
     *<br>
     * 字段名： yw_gift_card.Status
     */
    @Description({"卡状态：active为可购买，close为无库存", "不能为空", "数据长度: 20"})
    @NonNull
    private String status;

    /**
     *
     *   使用规则    <br>
     *<br>
     * 字段名： yw_gift_card.Content
     */
    @Description({"使用规则", "数据长度: 4000"})
    private String content;

    /**
     *
     *   使用场景    <br>
     *<br>
     * 字段名： yw_gift_card.Scene
     */
    @Description({"使用场景", "数据长度: 100"})
    private String scene;

    /**
     *
     *   礼品卡图片    <br>
     *<br>
     * 字段名： yw_gift_card.Image
     */
    @Description({"礼品卡图片", "数据长度: 520"})
    private String image;

    /**
     *
     *   售卖价格(针对代金券)    <br>
     *<br>
     * 字段名： yw_gift_card.Price
     */
    @Description({"售卖价格(针对代金券)", "数据长度: 10"})
    private BigDecimal price;

    /**
     *
     *   卡值类型：'variable'为动态面值，'fixed'为固定面值    <br>
     *<br>
     * 字段名： yw_gift_card.CardValueType
     */
    @Description({"卡值类型：'variable'为动态面值，'fixed'为固定面值", "不能为空", "数据长度: 100"})
    @NonNull
    private String cardValueType;

    /**
     *
     *   礼品卡面值    <br>
     *<br>
     * 字段名： yw_gift_card.FaceValue
     */
    @Description({"礼品卡面值", "数据长度: 10"})
    private BigDecimal faceValue;

    /**
     *
     *   礼品卡动态面值最小值    <br>
     *<br>
     * 字段名： yw_gift_card.CardMinValue
     */
    @Description({"礼品卡动态面值最小值", "数据长度: 10"})
    private BigDecimal cardMinValue;

    /**
     *
     *   礼品卡动态面值最大值    <br>
     *<br>
     * 字段名： yw_gift_card.CardMaxValue
     */
    @Description({"礼品卡动态面值最大值", "数据长度: 10"})
    private BigDecimal cardMaxValue;

    /**
     *
     *   折扣率    <br>
     *<br>
     * 字段名： yw_gift_card.CardDiscountPercent
     */
    @Description({"折扣率", "数据长度: 10"})
    private BigDecimal cardDiscountPercent;

    /**
     *
     *   币种：1-人民币；2-港币；3-日元；4-美元    <br>
     *<br>
     * 字段名： yw_gift_card.Currency
     */
    @Description({"币种：1-人民币；2-港币；3-日元；4-美元", "不能为空", "数据长度: 10"})
    @NonNull
    private Integer currency;

    /**
     *
     *   是否允许退款    <br>
     *<br>
     * 字段名： yw_gift_card.IsRefundAllowed
     */
    @Description({"是否允许退款", "不能为空", "数据长度: 1"})
    @NonNull
    private Boolean isRefundAllowed;

    /**
     *
     *   排序字段，升序    <br>
     *<br>
     * 字段名： yw_gift_card.Ranking
     */
    @Description({"排序字段，升序", "数据长度: 10"})
    private Integer ranking;

    /**
     *
     *   商户Id    <br>
     *<br>
     * 字段名： yw_gift_card.StoreId
     */
    @Description({"商户Id", "数据长度: 100"})
    private String storeId;

    /**
     *
     *   You World更新时间    <br>
     *<br>
     * 字段名： yw_gift_card.LastModifiedTime
     */
    @Description({"You World更新时间", "数据长度: 26"})
    private Date lastModifiedTime;

    public static final Boolean NOT_DELETED = Deleted.NOT_DELETED.value();

    public static final Boolean IS_DELETED = Deleted.IS_DELETED.value();

    /**
     *
     *   逻辑删除    <br>
     *<br>
     * 字段名： yw_gift_card.Deleted
     */
    @Description({"逻辑删除", "不能为空", "数据长度: 1"})
    @NonNull
    private Boolean deleted;

    /**
     *
     *   创建用户    <br>
     *<br>
     * 字段名： yw_gift_card.CreateUser
     */
    @Description({"创建用户", "不能为空", "数据长度: 50"})
    @NonNull
    private String createUser;

    /**
     *
     *   创建时间    <br>
     *<br>
     * 字段名： yw_gift_card.CreateTime
     */
    @Description({"创建时间", "不能为空", "数据长度: 26"})
    @NonNull
    private Date createTime;

    /**
     *
     *   修改用户    <br>
     *<br>
     * 字段名： yw_gift_card.UpdateUser
     */
    @Description({"修改用户", "不能为空", "数据长度: 50"})
    @NonNull
    private String updateUser;

    /**
     *
     *   修改时间    <br>
     *<br>
     * 字段名： yw_gift_card.UpdateTime
     */
    @Description({"修改时间", "不能为空", "数据长度: 26"})
    @NonNull
    private Date updateTime;

    private static final long serialVersionUID = 1L;

    /**
     * 获取参数<br><br>
     *
     * 字段名： yw_gift_card.Id
     */
    public Long getId() {
        return id;
    }

    /**
     * 设置参数<br><br>
     *
     * 字段名： yw_gift_card.Id
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * 获取参数<br><br>
     *
     *   礼品卡Id    <br>
     *<br>
     * 字段名： yw_gift_card.CardId
     */
    public Integer getCardId() {
        return cardId;
    }

    /**
     * 设置参数<br><br>
     *
     *   礼品卡Id<br>
     *<br>
     * 字段名： yw_gift_card.CardId
     */
    public void setCardId(Integer cardId) {
        this.cardId = cardId;
    }

    /**
     * 获取参数<br><br>
     *
     *   国家或地区    <br>
     *<br>
     * 字段名： yw_gift_card.Region
     */
    public String getRegion() {
        return region;
    }

    /**
     * 设置参数<br><br>
     *
     *   国家或地区<br>
     *<br>
     * 字段名： yw_gift_card.Region
     */
    public void setRegion(String region) {
        this.region = region == null ? null : region.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   服务商Id    <br>
     *<br>
     * 字段名： yw_gift_card.ServiceId
     */
    public String getServiceId() {
        return serviceId;
    }

    /**
     * 设置参数<br><br>
     *
     *   服务商Id<br>
     *<br>
     * 字段名： yw_gift_card.ServiceId
     */
    public void setServiceId(String serviceId) {
        this.serviceId = serviceId == null ? null : serviceId.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   渠道ID    <br>
     *<br>
     * 字段名： yw_gift_card.ChannelId
     */
    public String getChannelId() {
        return channelId;
    }

    /**
     * 设置参数<br><br>
     *
     *   渠道ID<br>
     *<br>
     * 字段名： yw_gift_card.ChannelId
     */
    public void setChannelId(String channelId) {
        this.channelId = channelId == null ? null : channelId.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   卡名称    <br>
     *<br>
     * 字段名： yw_gift_card.Name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置参数<br><br>
     *
     *   卡名称<br>
     *<br>
     * 字段名： yw_gift_card.Name
     */
    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   品牌Id    <br>
     *<br>
     * 字段名： yw_gift_card.BrandId
     */
    public String getBrandId() {
        return brandId;
    }

    /**
     * 设置参数<br><br>
     *
     *   品牌Id<br>
     *<br>
     * 字段名： yw_gift_card.BrandId
     */
    public void setBrandId(String brandId) {
        this.brandId = brandId == null ? null : brandId.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   卡状态：active为可购买，close为无库存    <br>
     *<br>
     * 字段名： yw_gift_card.Status
     */
    public String getStatus() {
        return status;
    }

    /**
     * 设置参数<br><br>
     *
     *   卡状态：active为可购买，close为无库存<br>
     *<br>
     * 字段名： yw_gift_card.Status
     */
    public void setStatus(String status) {
        this.status = status == null ? null : status.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   使用规则    <br>
     *<br>
     * 字段名： yw_gift_card.Content
     */
    public String getContent() {
        return content;
    }

    /**
     * 设置参数<br><br>
     *
     *   使用规则<br>
     *<br>
     * 字段名： yw_gift_card.Content
     */
    public void setContent(String content) {
        this.content = content == null ? null : content.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   使用场景    <br>
     *<br>
     * 字段名： yw_gift_card.Scene
     */
    public String getScene() {
        return scene;
    }

    /**
     * 设置参数<br><br>
     *
     *   使用场景<br>
     *<br>
     * 字段名： yw_gift_card.Scene
     */
    public void setScene(String scene) {
        this.scene = scene == null ? null : scene.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   礼品卡图片    <br>
     *<br>
     * 字段名： yw_gift_card.Image
     */
    public String getImage() {
        return image;
    }

    /**
     * 设置参数<br><br>
     *
     *   礼品卡图片<br>
     *<br>
     * 字段名： yw_gift_card.Image
     */
    public void setImage(String image) {
        this.image = image == null ? null : image.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   售卖价格(针对代金券)    <br>
     *<br>
     * 字段名： yw_gift_card.Price
     */
    public BigDecimal getPrice() {
        return price;
    }

    /**
     * 设置参数<br><br>
     *
     *   售卖价格(针对代金券)<br>
     *<br>
     * 字段名： yw_gift_card.Price
     */
    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    /**
     * 获取参数<br><br>
     *
     *   卡值类型：'variable'为动态面值，'fixed'为固定面值    <br>
     *<br>
     * 字段名： yw_gift_card.CardValueType
     */
    public String getCardValueType() {
        return cardValueType;
    }

    /**
     * 设置参数<br><br>
     *
     *   卡值类型：'variable'为动态面值，'fixed'为固定面值<br>
     *<br>
     * 字段名： yw_gift_card.CardValueType
     */
    public void setCardValueType(String cardValueType) {
        this.cardValueType = cardValueType == null ? null : cardValueType.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   礼品卡面值    <br>
     *<br>
     * 字段名： yw_gift_card.FaceValue
     */
    public BigDecimal getFaceValue() {
        return faceValue;
    }

    /**
     * 设置参数<br><br>
     *
     *   礼品卡面值<br>
     *<br>
     * 字段名： yw_gift_card.FaceValue
     */
    public void setFaceValue(BigDecimal faceValue) {
        this.faceValue = faceValue;
    }

    /**
     * 获取参数<br><br>
     *
     *   礼品卡动态面值最小值    <br>
     *<br>
     * 字段名： yw_gift_card.CardMinValue
     */
    public BigDecimal getCardMinValue() {
        return cardMinValue;
    }

    /**
     * 设置参数<br><br>
     *
     *   礼品卡动态面值最小值<br>
     *<br>
     * 字段名： yw_gift_card.CardMinValue
     */
    public void setCardMinValue(BigDecimal cardMinValue) {
        this.cardMinValue = cardMinValue;
    }

    /**
     * 获取参数<br><br>
     *
     *   礼品卡动态面值最大值    <br>
     *<br>
     * 字段名： yw_gift_card.CardMaxValue
     */
    public BigDecimal getCardMaxValue() {
        return cardMaxValue;
    }

    /**
     * 设置参数<br><br>
     *
     *   礼品卡动态面值最大值<br>
     *<br>
     * 字段名： yw_gift_card.CardMaxValue
     */
    public void setCardMaxValue(BigDecimal cardMaxValue) {
        this.cardMaxValue = cardMaxValue;
    }

    /**
     * 获取参数<br><br>
     *
     *   折扣率    <br>
     *<br>
     * 字段名： yw_gift_card.CardDiscountPercent
     */
    public BigDecimal getCardDiscountPercent() {
        return cardDiscountPercent;
    }

    /**
     * 设置参数<br><br>
     *
     *   折扣率<br>
     *<br>
     * 字段名： yw_gift_card.CardDiscountPercent
     */
    public void setCardDiscountPercent(BigDecimal cardDiscountPercent) {
        this.cardDiscountPercent = cardDiscountPercent;
    }

    /**
     * 获取参数<br><br>
     *
     *   币种：1-人民币；2-港币；3-日元；4-美元    <br>
     *<br>
     * 字段名： yw_gift_card.Currency
     */
    public Integer getCurrency() {
        return currency;
    }

    /**
     * 设置参数<br><br>
     *
     *   币种：1-人民币；2-港币；3-日元；4-美元<br>
     *<br>
     * 字段名： yw_gift_card.Currency
     */
    public void setCurrency(Integer currency) {
        this.currency = currency;
    }

    /**
     * 获取参数<br><br>
     *
     *   是否允许退款    <br>
     *<br>
     * 字段名： yw_gift_card.IsRefundAllowed
     */
    public Boolean getIsRefundAllowed() {
        return isRefundAllowed;
    }

    /**
     * 设置参数<br><br>
     *
     *   是否允许退款<br>
     *<br>
     * 字段名： yw_gift_card.IsRefundAllowed
     */
    public void setIsRefundAllowed(Boolean isRefundAllowed) {
        this.isRefundAllowed = isRefundAllowed;
    }

    /**
     * 获取参数<br><br>
     *
     *   排序字段，升序    <br>
     *<br>
     * 字段名： yw_gift_card.Ranking
     */
    public Integer getRanking() {
        return ranking;
    }

    /**
     * 设置参数<br><br>
     *
     *   排序字段，升序<br>
     *<br>
     * 字段名： yw_gift_card.Ranking
     */
    public void setRanking(Integer ranking) {
        this.ranking = ranking;
    }

    /**
     * 获取参数<br><br>
     *
     *   商户Id    <br>
     *<br>
     * 字段名： yw_gift_card.StoreId
     */
    public String getStoreId() {
        return storeId;
    }

    /**
     * 设置参数<br><br>
     *
     *   商户Id<br>
     *<br>
     * 字段名： yw_gift_card.StoreId
     */
    public void setStoreId(String storeId) {
        this.storeId = storeId == null ? null : storeId.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   You World更新时间    <br>
     *<br>
     * 字段名： yw_gift_card.LastModifiedTime
     */
    public Date getLastModifiedTime() {
        return lastModifiedTime;
    }

    /**
     * 设置参数<br><br>
     *
     *   You World更新时间<br>
     *<br>
     * 字段名： yw_gift_card.LastModifiedTime
     */
    public void setLastModifiedTime(Date lastModifiedTime) {
        this.lastModifiedTime = lastModifiedTime;
    }

    public void andLogicalDeleted(boolean deleted) {
        setDeleted(deleted ? Deleted.IS_DELETED.value() : Deleted.NOT_DELETED.value());
    }

    /**
     * 获取参数<br><br>
     *
     *   逻辑删除    <br>
     *<br>
     * 字段名： yw_gift_card.Deleted
     */
    public Boolean getDeleted() {
        return deleted;
    }

    /**
     * 设置参数<br><br>
     *
     *   逻辑删除<br>
     *<br>
     * 字段名： yw_gift_card.Deleted
     */
    public void setDeleted(Boolean deleted) {
        this.deleted = deleted;
    }

    /**
     * 获取参数<br><br>
     *
     *   创建用户    <br>
     *<br>
     * 字段名： yw_gift_card.CreateUser
     */
    public String getCreateUser() {
        return createUser;
    }

    /**
     * 设置参数<br><br>
     *
     *   创建用户<br>
     *<br>
     * 字段名： yw_gift_card.CreateUser
     */
    public void setCreateUser(String createUser) {
        this.createUser = createUser == null ? null : createUser.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   创建时间    <br>
     *<br>
     * 字段名： yw_gift_card.CreateTime
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * 设置参数<br><br>
     *
     *   创建时间<br>
     *<br>
     * 字段名： yw_gift_card.CreateTime
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取参数<br><br>
     *
     *   修改用户    <br>
     *<br>
     * 字段名： yw_gift_card.UpdateUser
     */
    public String getUpdateUser() {
        return updateUser;
    }

    /**
     * 设置参数<br><br>
     *
     *   修改用户<br>
     *<br>
     * 字段名： yw_gift_card.UpdateUser
     */
    public void setUpdateUser(String updateUser) {
        this.updateUser = updateUser == null ? null : updateUser.trim();
    }

    /**
     * 获取参数<br><br>
     *
     *   修改时间    <br>
     *<br>
     * 字段名： yw_gift_card.UpdateTime
     */
    public Date getUpdateTime() {
        return updateTime;
    }

    /**
     * 设置参数<br><br>
     *
     *   修改时间<br>
     *<br>
     * 字段名： yw_gift_card.UpdateTime
     */
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public enum Deleted {
        NOT_DELETED(new Boolean("false"), "未删除"),
        IS_DELETED(new Boolean("true"), "已删除");

        private final Boolean value;

        private final String name;

        Deleted(Boolean value, String name) {
            this.value = value;
            this.name = name;
        }

        public Boolean getValue() {
            return this.value;
        }

        public Boolean value() {
            return this.value;
        }

        public String getName() {
            return this.name;
        }
    }

    public enum Column {
        id("Id", "id", "BIGINT", false),
        cardId("CardId", "cardId", "INTEGER", false),
        region("Region", "region", "VARCHAR", false),
        serviceId("ServiceId", "serviceId", "VARCHAR", false),
        channelId("ChannelId", "channelId", "VARCHAR", false),
        name("Name", "name", "VARCHAR", true),
        brandId("BrandId", "brandId", "VARCHAR", false),
        status("Status", "status", "VARCHAR", true),
        content("Content", "content", "VARCHAR", false),
        scene("Scene", "scene", "VARCHAR", false),
        image("Image", "image", "VARCHAR", false),
        price("Price", "price", "DECIMAL", false),
        cardValueType("CardValueType", "cardValueType", "VARCHAR", false),
        faceValue("FaceValue", "faceValue", "DECIMAL", false),
        cardMinValue("CardMinValue", "cardMinValue", "DECIMAL", false),
        cardMaxValue("CardMaxValue", "cardMaxValue", "DECIMAL", false),
        cardDiscountPercent("CardDiscountPercent", "cardDiscountPercent", "DECIMAL", false),
        currency("Currency", "currency", "INTEGER", false),
        isRefundAllowed("IsRefundAllowed", "isRefundAllowed", "BIT", false),
        ranking("Ranking", "ranking", "INTEGER", false),
        storeId("StoreId", "storeId", "VARCHAR", false),
        lastModifiedTime("LastModifiedTime", "lastModifiedTime", "TIMESTAMP", false),
        deleted("Deleted", "deleted", "BIT", false),
        createUser("CreateUser", "createUser", "VARCHAR", true),
        createTime("CreateTime", "createTime", "TIMESTAMP", false),
        updateUser("UpdateUser", "updateUser", "VARCHAR", false),
        updateTime("UpdateTime", "updateTime", "TIMESTAMP", false);

        private static final String BEGINNING_DELIMITER = "`";

        private static final String ENDING_DELIMITER = "`";

        private final String column;

        private final boolean isColumnNameDelimited;

        private final String javaProperty;

        private final String jdbcType;

        public String value() {
            return this.column;
        }

        public String getValue() {
            return this.column;
        }

        public String getJavaProperty() {
            return this.javaProperty;
        }

        public String getJdbcType() {
            return this.jdbcType;
        }

        Column(String column, String javaProperty, String jdbcType, boolean isColumnNameDelimited) {
            this.column = column;
            this.javaProperty = javaProperty;
            this.jdbcType = jdbcType;
            this.isColumnNameDelimited = isColumnNameDelimited;
        }

        public String desc() {
            return this.getEscapedColumnName() + " DESC";
        }

        public String asc() {
            return this.getEscapedColumnName() + " ASC";
        }

        public static Column[] excludes(Column ... excludes) {
            ArrayList<Column> columns = new ArrayList<>(Arrays.asList(Column.values()));
            if (excludes != null && excludes.length > 0) {
                columns.removeAll(new ArrayList<>(Arrays.asList(excludes)));
            }
            return columns.toArray(new Column[]{});
        }

        public String getEscapedColumnName() {
            if (this.isColumnNameDelimited) {
                return new StringBuilder().append(BEGINNING_DELIMITER).append(this.column).append(ENDING_DELIMITER).toString();
            } else {
                return this.column;
            }
        }
    }
}